package com.cango.qutz.web.auth.role.service;

import java.util.List;

import com.cango.qutz.web.entity.MenuButtonEntity;
import com.cango.qutz.web.entity.RoleEntity;
import com.cango.framework.base.pagination.PageInfo;
import com.cango.framework.base.pagination.PaginationResult;

/**
 * <p>
 * ClassName: IRoleService
 * </p>
 * <p>
 * Description: 角色Service接口
 * </p>
 * <p>
 * Author: weih
 * </p>
 * <p>
 * Date: 2015-04-01
 * </p>
 */
public interface IRoleService {
    /**
     * <p>
     * Description: 插入角色
     * </p>
     * 
     * @param role 角色对象
     * @return
     */
    int insert(RoleEntity role, String resources);

    /**
     * <p>
     * Description: 更新角色
     * </p>
     * 
     * @param role 角色对象
     * @return
     */
    int update(RoleEntity role, String resources);

    /**
     * <p>
     * Description: 删除角色
     * </p>
     * 
     * @param role 角色对象
     * @return
     */
    int delete(RoleEntity role);

    /**
     * <p>
     * Description: 根据角色id查询角色记录
     * </p>
     * 
     * @param roleId 角色对象
     * @return 角色对象
     */
    RoleEntity queryObjectById(Integer roleId);

    /**
     * <p>
     * Description: 分页查询角色记录列表
     * </p>
     * 
     * @param param 角色对象
     * @param pageinfo 分页对象
     * @return 分页记录
     */
    PaginationResult<RoleEntity> queryListByPage(RoleEntity param, PageInfo pageinfo);

    /**
     * <p>
     * Description: 查询未与某岗位关联的角色记录列表
     * </p>
     * 
     * @param param 角色对象
     * @param pageinfo 分页对象
     * @return 分页记录
     */
    PaginationResult<RoleEntity> queryRoleList(RoleEntity param, PageInfo pageinfo);

    /**
     * <p>
     * Description: 查询已与某岗位关联的角色记录列表
     * </p>
     * 
     * @param param 角色对象
     * @param pageinfo 分页对象
     * @return 分页记录
     */
    PaginationResult<RoleEntity> queryPositionRoleList(RoleEntity param, PageInfo pageinfo);

    /**
     * 功能描述: <br>
     * 验证角色代码的唯一性
     *
     * @param roleCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    boolean validCode(String roleCode);

    /**
     * 功能描述: <br>
     * 查询所有菜单按钮的集合
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<MenuButtonEntity> queryMenuButtonList(String roleCode);
}
